OPC Unified Architecture has its own type system, based on a set of built-in types, and a type graph that supports inheritance and creation of structured types.
The types in Microsoft .NET are different, and all data is represented using an Object type and its derivatives. Conversions between the two are available, but not always fully possible.
In addition, not everything that can be stored in an Object can later be processed by all .NET tools and languages. Microsoft has created so-called Common Language Specification (CLS), which has certain rules and restrictions that, if followed, guarantee cross-language compatibility. Public OPC Studio components (assemblies) are fully CLS compliant, and that includes the way the data types are converted to and from OPC types.
QuickOPC-UA converts data from OPC-UA to .NET according to following table:
OPC-UA type | .NET type (Object) |
Boolean | System.Boolean |
Byte | System.Byte |
ByteString | System.Byte[] |
DataValue | OpcLabs.EasyOpc.UA.UAAttributeData |
DateTime | System.DateTime (UTC) |
Double | System.Double |
ExpandedNodeId | OpcLabs.EasyOpc.UA.AddressSpace.UANodeId |
ExtensionObject |
when the OPC UA Complex Data extension is enabled (the default): UAGenericObject Class when the OPC UA Complex Data extension is disabled: OpcLabs.EasyOpc.UA.UAExtensionObject |
Float | System.Single |
Guid | System.Guid |
Int16 | System.Int16 |
Int32 | System.Int32 |
Int64 | System.Int64 |
LocalizedText | System.String (see note) |
NodeId | OpcLabs.EasyOpc.UA.AddressSpace.UANodeId |
QualifiedName | OpcLabs.EasyOpc.UA.AddressSpace.UAQualifiedName |
SByte | System.Int16 |
StatusCode | OpcLabs.EasyOpc.UA.UAStatusCode |
String | System.String |
UInt16 | System.Int32 |
UInt32 | System.Int64 |
UInt64 | System.Decimal |
XmlElement | System.Xml.XmlElement |
array of elementType | System.Array of the converted elementType |
Note: LocalizedText is converted to its text part.
Types that are highlighted do not convert from OPC-UA to their “natural” .NET counterparts, because the corresponding .NET type is not CLS compliant. Instead, a “wider” type that is CLS compliant is chosen.
Types not listed in the above table at all are not supported.
Strings are internally represented in Unicode.
In QuickOPC-UA for COM, the same types as in QuickOPC-UA for .NET are used. The type conversions between COM and .NET and performed by the Microsoft interoperability layer. Reference to Microsoft documentation for correspondences between the .NET and COM types.